package pe.edu.upc.dai.grupovictor.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import pe.edu.upc.dai.grupovictor.dao.ProfesorDao;
import pe.edu.upc.dai.grupovictor.dao.util.ConnectionUtils;
import pe.edu.upc.dai.grupovictor.dao.util.DaoException;
import pe.edu.upc.dai.grupovictor.model.Profesor;

public class ProfesorDaoImpl implements ProfesorDao {

    public Profesor seleccionarPorPrimaryKey(Long idProfesor) {
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        Profesor profesor = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("SELECT * FROM PROFESOR where ID_PROFESOR=?");
            st.setLong(1, idProfesor);
            rs = st.executeQuery();
            if (rs.next()) {
                profesor = new Profesor();
                profesor.setIdProfesor(rs.getLong("ID_PROFESOR"));
                profesor.setCoProfesor(rs.getString("CO_PROFESOR"));
                profesor.setNombreProfesor(rs.getString("NOMBRE_PROFESOR"));
            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return profesor;
    }

    public Profesor seleccionarPorNombre(String nombre) {
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        Profesor profesor = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("SELECT * FROM PROFESOR WHERE NOMBRE_PROFESOR LIKE ?");
            st.setString(1, nombre);
            rs = st.executeQuery();
            if (rs.next()) {
                profesor = new Profesor();
                profesor.setIdProfesor(rs.getLong("ID_PROFESOR"));
                profesor.setCoProfesor(rs.getString("CO_PROFESOR"));
                profesor.setNombreProfesor(rs.getString("NOMBRE_PROFESOR"));

            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return profesor;
    }

    public void insertar(Profesor profesor) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void actualizar(Profesor profesor) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void eliminar(Profesor profesor) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<Profesor> seleccionarTodos() {
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        Profesor profesor = null;
        List<Profesor> lista = new ArrayList<Profesor>();
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("SELECT * FROM PROFESOR ");
            rs = st.executeQuery();
            while (rs.next()) {
                profesor = mapResultSet(rs);
                lista.add(profesor);
            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return lista;
    }

    private Profesor mapResultSet(ResultSet rs) throws SQLException {
        Profesor profesor = new Profesor();
        profesor.setIdProfesor(rs.getLong("ID_PROFESOR"));
        profesor.setCoProfesor(rs.getString("CO_PROFESOR"));
        profesor.setNombreProfesor(rs.getString("NOMBRE_PROFESOR"));

        return profesor;
    }
}
